package com.sheng.leetcode.year2023.month08.day11;

import org.junit.Test;

/**
 * @author by ls
 * @date 2023/8/11
 * <p>
 * 1572. 矩阵对角线元素的和<p>
 * <p>
 * 给你一个正方形矩阵 mat，请你返回矩阵对角线元素的和。<p>
 * 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。<p>
 * <p>
 * 示例  1：<p>
 * 输入：mat = [[1,2,3],<p>
 * [4,5,6],<p>
 * [7,8,9]]<p>
 * 输出：25<p>
 * 解释：对角线的和为：1 + 5 + 9 + 3 + 7 = 25<p>
 * 请注意，元素 mat[1][1] = 5 只会被计算一次。<p>
 * <p>
 * 示例  2：<p>
 * 输入：mat = [[1,1,1,1],<p>
 * [1,1,1,1],<p>
 * [1,1,1,1],<p>
 * [1,1,1,1]]<p>
 * 输出：8<p>
 * <p>
 * 示例 3：<p>
 * 输入：mat = [[5]]<p>
 * 输出：5<p>
 * <p>
 * 提示：<p>
 * n == mat.length == mat[i].length<p>
 * 1 <= n <= 100<p>
 * 1 <= mat[i][j] <= 100<p>
 */
public class LeetCode1572 {

    @Test
    public void test01() {
//        int[][] mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//        int[][] mat = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}};
        int[][] mat = {{5}};
        System.out.println(new Solution().diagonalSum(mat));
    }
}

class Solution {
    public int diagonalSum(int[][] mat) {
        int n = mat.length;
        int ans = 0;
        for (int i = 0, j = 0; i < n; i++, j++) {
            // 从左上到右下
            ans += mat[i][j];
            // 从右上到做下
            ans += mat[n - i - 1][j];
        }
        // 长度为奇数时，两条对角线中间进行了交叉，去除重复
        if (n % 2 != 0) {
            ans -= mat[n / 2][n / 2];
        }
        return ans;
    }
}
